home *** CD-ROM | disk | FTP | other *** search
- /******************************************************************************
- ** **
- ** Module: Error_MesgLib.c **
- ** **
- ** **
- ** Purpose: **
- ** **
- ** **
- ** Copyright (C) 1992, 1993 Apple Computer, Inc. All rights reserved. **
- ** **
- ** **
- *****************************************************************************/
-
- #include <assert.h>
- #include "QD3D.h"
- #include "QD3DErrors.h"
-
- #include "Error_MesgLib.h"
-
- typedef struct ErrorLookup {
- struct ErrorLookup *lookup;
- long errorCode;
- char *errorString;
- } ErrorLookup;
-
- /*
- To generate these tables, copy/paste the error codes from QD3DErrors.h
- and use this regexp:
-
- Find: kQ3Error([0-9A-z]*),
- Replace: NULL, kQ3Error\1, "kQ3Error\1",
-
- Find: kQ3Warning([0-9A-z]*),
- Replace: NULL, kQ3Warning\1, "kQ3Warning\1",
-
- Find: kQ3Notice([0-9A-z]*),
- Replace: NULL, kQ3Notice\1, "kQ3Notice\1",
-
- Don't forget to add NULL, 0, NULL at the end of each list
- */
-
- static unsigned long gNumErrors = 0;
- static ErrorLookup gErrorLookup[] =
- {
- NULL, kQ3ErrorNone, "kQ3ErrorNone",
- /* Fatal Errors */
- NULL, kQ3ErrorInternalError, "kQ3ErrorInternalError",
- NULL, kQ3ErrorNoRecovery, "kQ3ErrorNoRecovery", /* TODO: This is not used correctly */
- NULL, kQ3ErrorLastFatalError, "kQ3ErrorLastFatalError",
- /* System Errors */
- NULL, kQ3ErrorNotInitialized, "kQ3ErrorNotInitialized",
- NULL, kQ3ErrorAlreadyInitialized, "kQ3ErrorAlreadyInitialized",
- NULL, kQ3ErrorUnimplemented, "kQ3ErrorUnimplemented",
- NULL, kQ3ErrorRegistrationFailed, "kQ3ErrorRegistrationFailed",
- /* OS Errors */
- NULL, kQ3ErrorUnixError, "kQ3ErrorUnixError",
- NULL, kQ3ErrorMacintoshError, "kQ3ErrorMacintoshError",
- NULL, kQ3ErrorX11Error, "kQ3ErrorX11Error",
- /* Memory Errors */
- NULL, kQ3ErrorMemoryLeak, "kQ3ErrorMemoryLeak",
- NULL, kQ3ErrorOutOfMemory, "kQ3ErrorOutOfMemory",
- /* Parameter errors */
- NULL, kQ3ErrorNULLParameter, "kQ3ErrorNULLParameter",
- NULL, kQ3ErrorParameterOutOfRange, "kQ3ErrorParameterOutOfRange",
- NULL, kQ3ErrorInvalidParameter, "kQ3ErrorInvalidParameter", /* TODO: Make this more specific */
- NULL, kQ3ErrorInvalidData, "kQ3ErrorInvalidData", /* TODO: Is this used? */
- NULL, kQ3ErrorAcceleratorAlreadySet, "kQ3ErrorAcceleratorAlreadySet", /* TODO: Is this used? */
- NULL, kQ3ErrorVector3DNotUnitLength, "kQ3ErrorVector3DNotUnitLength",
- NULL, kQ3ErrorVector3DZeroLength, "kQ3ErrorVector3DZeroLength",
- /* Object Errors */
- NULL, kQ3ErrorInvalidObject, "kQ3ErrorInvalidObject",
- NULL, kQ3ErrorInvalidObjectClass, "kQ3ErrorInvalidObjectClass",
- NULL, kQ3ErrorInvalidObjectType, "kQ3ErrorInvalidObjectType",
- NULL, kQ3ErrorInvalidObjectName, "kQ3ErrorInvalidObjectName",
- NULL, kQ3ErrorObjectClassInUse, "kQ3ErrorObjectClassInUse",
- NULL, kQ3ErrorAccessRestricted, "kQ3ErrorAccessRestricted",
- NULL, kQ3ErrorMetaHandlerRequired, "kQ3ErrorMetaHandlerRequired",
- NULL, kQ3ErrorNeedRequiredMethods, "kQ3ErrorNeedRequiredMethods",
- NULL, kQ3ErrorNoSubClassType, "kQ3ErrorNoSubClassType",
- NULL, kQ3ErrorUnknownElementType, "kQ3ErrorUnknownElementType",
- NULL, kQ3ErrorNotSupported, "kQ3ErrorNotSupported",
- /* Extension Errors */
- NULL, kQ3ErrorNoExtensionsFolder, "kQ3ErrorNoExtensionsFolder",
- NULL, kQ3ErrorExtensionError, "kQ3ErrorExtensionError",
- NULL, kQ3ErrorPrivateExtensionError, "kQ3ErrorPrivateExtensionError",
- /* Geometry Errors */
- NULL, kQ3ErrorDegenerateGeometry, "kQ3ErrorDegenerateGeometry",
- NULL, kQ3ErrorGeometryInsufficientNumberOfPoints, "kQ3ErrorGeometryInsufficientNumberOfPoints",
- /* IO Errors */
- NULL, kQ3ErrorNoStorageSetForFile, "kQ3ErrorNoStorageSetForFile",
- NULL, kQ3ErrorEndOfFile, "kQ3ErrorEndOfFile",
- NULL, kQ3ErrorFileCancelled, "kQ3ErrorFileCancelled",
- NULL, kQ3ErrorInvalidMetafile, "kQ3ErrorInvalidMetafile",
- NULL, kQ3ErrorInvalidMetafilePrimitive, "kQ3ErrorInvalidMetafilePrimitive",
- NULL, kQ3ErrorInvalidMetafileLabel, "kQ3ErrorInvalidMetafileLabel",
- NULL, kQ3ErrorInvalidMetafileObject, "kQ3ErrorInvalidMetafileObject",
- NULL, kQ3ErrorInvalidMetafileSubObject, "kQ3ErrorInvalidMetafileSubObject",
- NULL, kQ3ErrorInvalidSubObjectForObject, "kQ3ErrorInvalidSubObjectForObject",
- NULL, kQ3ErrorUnresolvableReference, "kQ3ErrorUnresolvableReference",
- NULL, kQ3ErrorUnknownObject, "kQ3ErrorUnknownObject",
- NULL, kQ3ErrorStorageInUse, "kQ3ErrorStorageInUse",
- NULL, kQ3ErrorStorageAlreadyOpen, "kQ3ErrorStorageAlreadyOpen",
- NULL, kQ3ErrorStorageNotOpen, "kQ3ErrorStorageNotOpen",
- NULL, kQ3ErrorStorageIsOpen, "kQ3ErrorStorageIsOpen",
- NULL, kQ3ErrorFileAlreadyOpen, "kQ3ErrorFileAlreadyOpen",
- NULL, kQ3ErrorFileNotOpen, "kQ3ErrorFileNotOpen",
- NULL, kQ3ErrorFileIsOpen, "kQ3ErrorFileIsOpen",
- NULL, kQ3ErrorBeginWriteAlreadyCalled, "kQ3ErrorBeginWriteAlreadyCalled",
- NULL, kQ3ErrorBeginWriteNotCalled, "kQ3ErrorBeginWriteNotCalled",
- NULL, kQ3ErrorEndWriteNotCalled, "kQ3ErrorEndWriteNotCalled",
- NULL, kQ3ErrorReadStateInactive, "kQ3ErrorReadStateInactive",
- NULL, kQ3ErrorStateUnavailable, "kQ3ErrorStateUnavailable",
- NULL, kQ3ErrorWriteStateInactive, "kQ3ErrorWriteStateInactive",
- NULL, kQ3ErrorSizeNotLongAligned, "kQ3ErrorSizeNotLongAligned",
- NULL, kQ3ErrorFileModeRestriction, "kQ3ErrorFileModeRestriction",
- NULL, kQ3ErrorInvalidHexString, "kQ3ErrorInvalidHexString",
- NULL, kQ3ErrorWroteMoreThanSize, "kQ3ErrorWroteMoreThanSize",
- NULL, kQ3ErrorWroteLessThanSize, "kQ3ErrorWroteLessThanSize",
- NULL, kQ3ErrorReadLessThanSize, "kQ3ErrorReadLessThanSize",
- NULL, kQ3ErrorReadMoreThanSize, "kQ3ErrorReadMoreThanSize",
- NULL, kQ3ErrorNoBeginGroup, "kQ3ErrorNoBeginGroup", /* was missing! */
- NULL, kQ3ErrorSizeMismatch, "kQ3ErrorSizeMismatch",
- NULL, kQ3ErrorStringExceedsMaximumLength, "kQ3ErrorStringExceedsMaximumLength",
- NULL, kQ3ErrorValueExceedsMaximumSize, "kQ3ErrorValueExceedsMaximumSize",
- NULL, kQ3ErrorNonUniqueLabel, "kQ3ErrorNonUniqueLabel",
- NULL, kQ3ErrorEndOfContainer, "kQ3ErrorEndOfContainer", /* was missing! */
- NULL, kQ3ErrorUnmatchedEndGroup, "kQ3ErrorUnmatchedEndGroup",
- NULL, kQ3ErrorFileVersionExists, "kQ3ErrorFileVersionExists",
- /* View errors */
- NULL, kQ3ErrorViewNotStarted, "kQ3ErrorViewNotStarted",
- NULL, kQ3ErrorViewIsStarted, "kQ3ErrorViewIsStarted",
- NULL, kQ3ErrorRendererNotSet, "kQ3ErrorRendererNotSet",
- NULL, kQ3ErrorRenderingIsActive, "kQ3ErrorRenderingIsActive",
- NULL, kQ3ErrorImmediateModeUnderflow, "kQ3ErrorImmediateModeUnderflow",
- NULL, kQ3ErrorDisplayNotSet, "kQ3ErrorDisplayNotSet",
- NULL, kQ3ErrorCameraNotSet, "kQ3ErrorCameraNotSet",
- NULL, kQ3ErrorDrawContextNotSet, "kQ3ErrorDrawContextNotSet",
- NULL, kQ3ErrorNonInvertibleMatrix, "kQ3ErrorNonInvertibleMatrix",
- NULL, kQ3ErrorRenderingNotStarted, "kQ3ErrorRenderingNotStarted",
- NULL, kQ3ErrorPickingNotStarted, "kQ3ErrorPickingNotStarted",
- NULL, kQ3ErrorBoundsNotStarted, "kQ3ErrorBoundsNotStarted",
- NULL, kQ3ErrorDataNotAvailable, "kQ3ErrorDataNotAvailable",
- NULL, kQ3ErrorNothingToPop, "kQ3ErrorNothingToPop",
- /* Renderer Errors */
- NULL, kQ3ErrorUnknownStudioType, "kQ3ErrorUnknownStudioType", /* TODO Name Change */
- NULL, kQ3ErrorAlreadyRendering, "kQ3ErrorAlreadyRendering",
- NULL, kQ3ErrorStartGroupRange, "kQ3ErrorStartGroupRange",
- NULL, kQ3ErrorUnsupportedGeometryType, "kQ3ErrorUnsupportedGeometryType",
- NULL, kQ3ErrorInvalidGeometryType, "kQ3ErrorInvalidGeometryType",
- NULL, kQ3ErrorUnsupportedFunctionality, "kQ3ErrorUnsupportedFunctionality",
- /* Group Errors */
- NULL, kQ3ErrorInvalidPositionForGroup, "kQ3ErrorInvalidPositionForGroup",
- NULL, kQ3ErrorInvalidObjectForGroup, "kQ3ErrorInvalidObjectForGroup",
- NULL, kQ3ErrorInvalidObjectForPosition, "kQ3ErrorInvalidObjectForPosition",
- /* Transform Errors */
- NULL, kQ3ErrorScaleOfZero, "kQ3ErrorScaleOfZero", /* Transform errors? */
- /* String Errors */
- NULL, kQ3ErrorBadStringType, "kQ3ErrorBadStringType", /* What is this? */
- /* Attribute Errors */
- NULL, kQ3ErrorAttributeNotContained, "kQ3ErrorAttributeNotContained", /* What is this? */
- NULL, kQ3ErrorAttributeInvalidType, "kQ3ErrorAttributeInvalidType", /* What is this? */
- /* Camera Errors */
- NULL, kQ3ErrorInvalidCameraValues, "kQ3ErrorInvalidCameraValues", /* Redundant with kQ3ErrorParameterOutOfRange */
- /* DrawContext Errors */
- NULL, kQ3ErrorBadDrawContextType, "kQ3ErrorBadDrawContextType",
- NULL, kQ3ErrorBadDrawContextFlag, "kQ3ErrorBadDrawContextFlag",
- NULL, kQ3ErrorBadDrawContext, "kQ3ErrorBadDrawContext",
- NULL, kQ3ErrorUnsupportedPixelDepth, "kQ3ErrorUnsupportedPixelDepth",
- #if defined(ESCHER_VER_15) && ESCHER_VER_15
- /* Controller Errors */
- NULL, kQ3ErrorController, "kQ3ErrorController",
- /* Tracker Errors */
- NULL, kQ3ErrorTracker, "kQ3ErrorTracker",
- #endif /* ESCHER_VER_15 */
- NULL, 0, NULL
- };
-
- static unsigned long gNumWarnings = 0;
- static ErrorLookup gWarningLookup[] =
- {
- NULL, kQ3WarningNone, "kQ3WarningNone",
- /* General System */
- NULL, kQ3WarningInternalException, "kQ3WarningInternalException",
- /* Object Warnings */
- NULL, kQ3WarningNoObjectSupportForDuplicateMethod, "kQ3WarningNoObjectSupportForDuplicateMethod",
- NULL, kQ3WarningNoObjectSupportForWriteMethod, "kQ3WarningNoObjectSupportForWriteMethod",
- NULL, kQ3WarningNoObjectSupportForReadMethod, "kQ3WarningNoObjectSupportForReadMethod",
- NULL, kQ3WarningNoObjectSupportForDrawMethod, "kQ3WarningNoObjectSupportForDrawMethod",
- NULL, kQ3WarningUnknownElementType, "kQ3WarningUnknownElementType",
- NULL, kQ3WarningTypeAndMethodAlreadyDefined, "kQ3WarningTypeAndMethodAlreadyDefined",
- NULL, kQ3WarningTypeIsOutOfRange, "kQ3WarningTypeIsOutOfRange",
- NULL, kQ3WarningTypeHasNotBeenRegistered, "kQ3WarningTypeHasNotBeenRegistered",
- /* Parameter Warning (was missing) */
- NULL, kQ3WarningVector3DNotUnitLength, "kQ3WarningVector3DNotUnitLength",
- /* IO Warnings */
- NULL, kQ3WarningInvalidSubObjectForObject, "kQ3WarningInvalidSubObjectForObject",
- NULL, kQ3WarningInvalidHexString, "kQ3WarningInvalidHexString",
- NULL, kQ3WarningUnknownObject, "kQ3WarningUnknownObject",
- NULL, kQ3WarningInvalidMetafileObject, "kQ3WarningInvalidMetafileObject", /* was missing! */
- NULL, kQ3WarningUnmatchedBeginGroup, "kQ3WarningUnmatchedBeginGroup", /* was missing! */
- NULL, kQ3WarningUnmatchedEndGroup, "kQ3WarningUnmatchedEndGroup", /* was missing! */
- NULL, kQ3WarningInvalidTableOfContents, "kQ3WarningInvalidTableOfContents",
- NULL, kQ3WarningUnresolvableReference, "kQ3WarningUnresolvableReference",
- NULL, kQ3WarningNoAttachMethod, "kQ3WarningNoAttachMethod",
- NULL, kQ3WarningInconsistentData, "kQ3WarningInconsistentData",
- NULL, kQ3WarningReadLessThanSize, "kQ3WarningReadLessThanSize", /* was missing! */
- NULL, kQ3WarningFilePointerResolutionFailed, "kQ3WarningFilePointerResolutionFailed",
- NULL, kQ3WarningFilePointerRedefined, "kQ3WarningFilePointerRedefined", /* was missing! */
- NULL, kQ3WarningStringExceedsMaximumLength, "kQ3WarningStringExceedsMaximumLength",
- /* Memory Warnings */
- NULL, kQ3WarningLowMemory, "kQ3WarningLowMemory",
- NULL, kQ3WarningPossibleMemoryLeak, "kQ3WarningPossibleMemoryLeak",
- /* View Warnings */
- NULL, kQ3WarningViewTraversalInProgress, "kQ3WarningViewTraversalInProgress",
- NULL, kQ3WarningNonInvertibleMatrix, "kQ3WarningNonInvertibleMatrix",
- /* Quaternion Warning */
- NULL, kQ3WarningQuaternionEntriesAreZero, "kQ3WarningQuaternionEntriesAreZero",
- /* Renderer Warning */
- NULL, kQ3WarningFunctionalityNotSupported, "kQ3WarningFunctionalityNotSupported",
- /* DrawContext Warning */
- NULL, kQ3WarningInvalidPaneDimensions, "kQ3WarningInvalidPaneDimensions",
- /* Pick Warning */
- NULL, kQ3WarningPickParamOutside, "kQ3WarningPickParamOutside",
- /* Scale Warnings */
- NULL, kQ3WarningScaleEntriesAllZero, "kQ3WarningScaleEntriesAllZero", /* was missing! */
- NULL, kQ3WarningScaleContainsNegativeEntries, "kQ3WarningScaleContainsNegativeEntries", /* was missing! */
- /* Generic Warnings */
- NULL, kQ3WarningParameterOutOfRange, "kQ3WarningParameterOutOfRange", /* was missing! */
- NULL, 0, NULL
- };
-
- static unsigned long gNumNotices = 0;
- static ErrorLookup gNoticeLookup[] =
- {
- NULL, kQ3NoticeNone, "kQ3NoticeNone",
- NULL, kQ3NoticeDataAlreadyEmpty, "kQ3NoticeDataAlreadyEmpty",
- /* General */
- NULL, kQ3NoticeMethodNotSupported, "kQ3NoticeMethodNotSupported",
- NULL, kQ3NoticeObjectAlreadySet, "kQ3NoticeObjectAlreadySet",
- NULL, kQ3NoticeParameterOutOfRange, "kQ3NoticeParameterOutOfRange", /* was missing! */
- /* IO Notices */
- NULL, kQ3NoticeFileAliasWasChanged, "kQ3NoticeFileAliasWasChanged",
- /* Geometry */
- NULL, kQ3NoticeMeshVertexHasNoComponent, "kQ3NoticeMeshVertexHasNoComponent",
- NULL, kQ3NoticeMeshInvalidVertexFacePair, "kQ3NoticeMeshInvalidVertexFacePair",
- NULL, kQ3NoticeMeshEdgeVertexDoNotCorrespond, "kQ3NoticeMeshEdgeVertexDoNotCorrespond",
- NULL, kQ3NoticeMeshEdgeIsNotBoundary, "kQ3NoticeMeshEdgeIsNotBoundary",
- /* Draw Context */
- NULL, kQ3NoticeDrawContextNotSetUsingInternalDefaults, "kQ3NoticeDrawContextNotSetUsingInternalDefaults",
- /* Lights */
- NULL, kQ3NoticeInvalidAttenuationTypeUsingInternalDefaults, "kQ3NoticeInvalidAttenuationTypeUsingInternalDefaults",
- NULL, kQ3NoticeBrightnessGreaterThanOne, "kQ3NoticeBrightnessGreaterThanOne", /* was missing! */
- /* Scale */
- NULL, kQ3NoticeScaleContainsZeroEntries, "kQ3NoticeScaleContainsZeroEntries", /* was missing! */
- NULL, 0, NULL
- };
-
- static unsigned long build_lookup(ErrorLookup *table);
- static char *lookup(ErrorLookup *table, unsigned long nElems, long errorCode);
-
- static unsigned long build_lookup(ErrorLookup *table)
- {
- unsigned long total;
- unsigned long i, j;
- TQ3Boolean done;
-
- total = 0;
- while (table[total].errorString != NULL) total++;
-
- /* Bubble sort (slow, but who cares? - you're screwing up anyway) */
-
- for (i = 0; i < total; i++)
- {
- table[i].lookup = &table[i];
- }
-
- done = kQ3False;
-
- for (i = 0; i < total - 1; i++)
- {
- done = kQ3True;
-
- for (j = i + 1; j < total; j++)
- {
- if (table[i].errorCode > table[j].errorCode)
- {
- ErrorLookup *temp;
-
- temp = table[i].lookup;
- table[i].lookup = table[j].lookup;
- table[j].lookup = temp;
- done = kQ3False;
- }
- }
-
- if (done == kQ3True) break;
- }
-
- return total;
- }
-
- static char *lookup(ErrorLookup *table, unsigned long nElems, long errorCode)
- {
- long highElem = nElems - 1;
- long midElem = highElem / 2;
- long lowElem = 0;
- long direction = 1;
- static char notFound[100];
-
- while ( (highElem >= lowElem) &&
- ((direction = (errorCode - table[midElem].errorCode))) != 0)
- {
- if (direction > 0)
- {
- lowElem = midElem + 1;
- }
- else
- {
- highElem = midElem - 1;
- }
- midElem = (highElem + lowElem) / 2;
- }
-
- if (direction == 0)
- {
- #ifdef debugging
- assert(midElem <= nElems);
- #endif
- return table[midElem].errorString;
- }
- else
- {
- #ifdef debugging
- assert(lowElem <= nElems);
- #endif
- sprintf(notFound, "Error (%ld) not found", errorCode);
- return notFound;
- }
- }
-
-
- char *getErrorString(long errorID)
- {
- if (gNumErrors == 0)
- gNumErrors = build_lookup(gErrorLookup);
-
- return lookup(gErrorLookup, gNumErrors, errorID);
- }
-
- char *getWarningString(long errorID)
- {
- if (gNumWarnings == 0)
- gNumWarnings = build_lookup(gWarningLookup);
-
- return lookup(gWarningLookup, gNumWarnings, errorID);
- }
-
- char *getNoticeString(long errorID)
- {
- if (gNumNotices == 0)
- gNumNotices = build_lookup(gNoticeLookup);
-
- return lookup(gNoticeLookup, gNumNotices, errorID);
- }
-